/*
	Name: 飞飞侠
	Author: There,hello 
	Date: 14-10-19 19:29
	Description: Luogu P4473 
	Algorithm: 最短路
*/
#include<bits/stdc++.h>
using namespace std;
#define hahaha(a,b,c) (dis[a][x[b].x][x[b].y]+dis[c][x[b].x][x[b].y])
int a[160][160],b[160][160],n,m;
struct dd{
	int x,y;
}x[3];
int a_b,a_c,b_a,b_c,c_a,c_b;
void dij(int pos){
	int dis[160][160];
	bool v[160][160]={0};
	memset(dis,0x3f,sizeof(dis));
	dis[x[pos].x][x[pos].y]=0;
	priority_queue<pair<int,pair<int,int> > > q;
	q.push(make_pair(0,make_pair(x[pos].x,x[pos].y)));
	while(!q.empty()){
		int xx=q.top().second.first,
			yy=q.top().second.second;
		q.pop();
		if(v[xx][yy]) continue;
		v[xx][yy]=1;
		if(!b[xx][yy])continue;
		if(v[x[0].x][x[0].y]&&v[x[1].x][x[1].y]&&v[x[2].x][x[2].y])break;
		for(int i=max(xx-b[xx][yy],1);i<=min(n,xx+b[xx][yy]);++i){
			for(int j=max(yy-(b[xx][yy]-abs(i-xx)),1);j<=min(yy+(b[xx][yy]-abs(i-xx)),m);++j){
				if(dis[i][j]>dis[xx][yy]+a[xx][yy]){
					dis[i][j]=dis[xx][yy]+a[xx][yy];
					if(!v[i][j])q.push(make_pair(-dis[i][j],make_pair(i,j)));
				}
			}
		}
	}
	if(pos==0){
		a_b=dis[x[1].x][x[1].y];
		a_c=dis[x[2].x][x[2].y];
	}
	else if(pos==1){
		b_a=dis[x[0].x][x[0].y];
		b_c=dis[x[2].x][x[2].y];
	}
	else {
		c_a=dis[x[0].x][x[0].y];
		c_b=dis[x[1].x][x[1].y];
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
	for(int j=1;j<=m;++j)
	scanf("%d",&b[i][j]);
	for(int i=1;i<=n;++i)
	for(int j=1;j<=m;++j)
	scanf("%d",&a[i][j]);
	scanf("%d%d%d%d%d%d",&x[0].x,&x[0].y,&x[1].x,&x[1].y,&x[2].x,&x[2].y);
	dij(0);
	dij(1);
	dij(2);
	int xx=b_a+c_a,yy=a_b+c_b,zz=a_c+b_c;
	int ans=min(xx,min(yy,zz));
	if(ans<0x3f3f3f3f)
	printf("%c\n%d",ans==xx?'X':(ans==yy?'Y':'Z'),ans);
	else printf("NO");
}
